"""
宿舍内务pro

宿舍内务根据难度分为几个等级，每完成一项任务就可以累计对应等级的分数。等级和分数对应关系如下：
1级：擦桌子、椅子、窗户 - 对应1分
2级：扫地、拖地 - 对应2分
3级：扫厕所 - 对应3分
4级：帮全宿舍打饭 - 对应4分
5级：帮全宿舍签到 - 对应5分

编写一个Python程序，先读取“内务记录.txt”文件，获取所有已填写的信息（字典格式）。
然后让用户输入自己的名字，名字不存在则提示名字错误然后结束程序，如果名字存在，则循环输入自己完成的宿舍内务任务和完成次数。
每次输入结束后，程序会统计并显示用户总共完成每项任务的次数（包括以前的记录）。
如果任务名称不存在则跳出循环，打印用户的总分，并将本次的任务记录更新到 “内务记录.txt” 文件中，程序结束

编程思路提示：
使用with open来操作文件。
读取文件时，将字符串转换回字典。
写入文件前，将字典转换为字符串。
使用循环来接收用户输入的任务和次数。
使用字典来存储和更新任务次数。
输入为空时结束循环，写入文件。
判断key存不存在字典用 if key in dict: 的方式，或者用异常捕获配合 dict[key] 的方式
任务和分数的对应字典用：
    task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}
"""


import ast

# 任务和分数的对应字典
task_scores = {'擦桌子': 1, '擦椅子': 1, '擦窗户': 1, '扫地': 2, '拖地': 2, '扫厕所': 3, '帮全宿舍打饭': 4, '帮全宿舍签到': 5}

def read_file():
    try:
        with open('内务记录.txt', 'r') as f:
            content = f.read()
            if content:
                # 将读取的字符串转换为字典
                return ast.literal_eval(content)
            else:
                return {}
    except FileNotFoundError:
        return {}

def write_file(data):
    with open('内务记录.txt', 'w') as f:
        # 将字典转换为字符串写入文件
        f.write(str(data))

name = input('请输入你的名字: ')

# 读取文件中的记录
records = read_file()

if name not in records:
    print('名字错误')
else:
    task_count = records[name]
    while True:
        task = input('请输入完成的宿舍内务任务（输入空行结束）: ')
        if not task:
            break
        if task not in task_scores:
            break
        times = int(input('请输入完成的次数: '))
        if task not in task_count:
            task_count[task] = times
        else:
            task_count[task] += times
        print('各项任务完成次数统计:')
        for t in task_count:
            print(f'{t}: {task_count[t]}次')
    total_score = 0
    for t in task_count:
        total_score += task_scores[t] * task_count[t]
    print(f'你的总分数为: {total_score}')
    records[name] = task_count
    write_file(records)